﻿//#include <iostream> 
//using namespace std;
//class Date
//{
//public:
//    Date()
//    {
//
//    }
//    Date(int year, int month, int day)
//    {
//        _year = year;
//        _month = month;
//        _day = day;
//     }
//    void print()
//    {
//        cout << _year << _month << _day;
//    }
//private:
//
//    int _year;
//    int _month;
//    int _day;
//};
//int main()
//{
//    Date d1;
//    Date d3;
//    Date d2(2005, 5, 26);
//    d2.print();
//    return 0;
//}
/*#include <iostream>
using namespace std;
class date
{
public:
    void set(int year, int month, int day)
    {
        _year = year;
        _month = month;
        _day = day;
    }
    void dayjudge()
    {
        int daymonth[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
        if (_month == 2 && (_year % 4 == 0 && _year % 100 != 0) || (_year % 400 == 0))
        {
 /*           daymonth[_month] + 1;
        }
        _day =_day + 1;
        if (_day > daymonth[_month])
        {
            _month ++;
            _day = 1;
        }
        if (_month > 12)
        {
            _year++;
            _month = 1;
        }
    }*/
//    void print()
//    {
//        cout << _year << " " << _month << " " << _day;
//    }
//private:
//    int _year;
//    int _month;
//    int _day;
//};
//int main()
//{
//    int year,month,day;
//    cin >> year>>month>>day;
//    date d1;
//    d1.set(year, month, day);
//    d1.dayjudge();
//    d1.print();
//    return 0;
//#include <iostream>
//#include <string>
//
//class Book {
//private:
//    std::string title;
//    std::string author;
//    int publicationYear;
//    double price;
//
//public:
//    // 默认构造函数
//    Book();
//
//    // 带参数的构造函数
//    Book(const std::string& t, const std::string& a, int year, double p);
//
//    // 显示书籍信息
//    void displayInfo() const;
//
//    // 更新书籍价格
//    void updatePrice(double newPrice);
//};
//
//// 默认构造函数的实现
//Book::Book() : title("Unknown"), author("Unknown"), publicationYear(0), price(0.0) {}
//
//// 带参数的构造函数的实现
//Book::Book(const std::string& t, const std::string& a, int year, double p) :
//    title(t), author(a), publicationYear(year), price(p) {}
//
//// 显示书籍信息函数的实现
//void Book::displayInfo() const {
//    std::cout << "书名: " << title << std::endl;
//    std::cout << "作者: " << author << std::endl;
//    std::cout << "出版年份: " << publicationYear << std::endl;
//    std::cout << "价格: " << price << " 元" << std::endl;
//}
//
//// 更新书籍价格函数的实现
//void Book::updatePrice(double newPrice) {
//    price = newPrice;
//}
//
//int main() {
//    // 创建包含 4 本不同书籍信息的对象数组
//    Book books[4] = {
//        // 第一本书使用默认构造函数创建
//        Book(),
//        // 其余三本书使用带参数的构造函数创建
//        Book("C++ Primer", "Stanley Lippman", 2012, 128.0),
//        Book("Effective C++", "Scott Meyers", 2005, 89.0),
//        Book("The C Programming Language", "Brian Kernighan", 1978, 49.0)
//    };
//      
//    // 第一次遍历数组，输出每本书的详细信息
//    std::cout << "第一次输出书籍信息：" << std::endl;
//    for (int i = 0; i < 4; ++i) {
//        books[i].displayInfo();
//        std::cout << std::endl;
//    }
//
//    // 更新数组中第二本书的价格
//    books[1].updatePrice(59.9);
//
//    // 第二次遍历数组，输出每本书的详细信息
//    std::cout << "更新第二本书价格后，再次输出书籍信息：" << std::endl;
//    for (int i = 0; i < 4; ++i) {
//        books[i].displayInfo();
//        std::cout << std::endl;
//    }
//
//    return 0;
////}
//#include <iostream>
//#include <iomanip>
//#include <math.h>
//using namespace std;
//class Point
//{
//    double x, y;
//public:
//    Point()
//    {
//        x = 0; y = 0;
//    }
//    Point(double x_value, double y_value)
//    {
//        x = x_value;
//        y = y_value;
//    }
//    double getx()
//    {
//        return x;
//    }
//    double gety()
//    {
//        return y;
//    }
//    void setx(double  x_value)
//    {
//        x = x_value;
//    }
//    void sety(double  y_value)
//    {
//        y = y_value;
//    }
//    double distanceToanotherPoint(Point p)
//    {
//        return  sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
//    }
//};
//int main()
//{
//    int t;
//    cin >> t;
//    double x1, y1, x2, y2;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> x1 >> y1 >> x2 >> y2;
//        Point point1(x1, y1);
//        Point point2(x2, y2);
//        point1.setx(x1);
//        point1.sety(y1);
//        point2.setx(x2);
//        point2.sety(y2);
//        double d = point1.distanceToanotherPoint(point2);
//        cout << "Distance of Point(" << fixed << setprecision(2) << x1 << "," << y1 << ")" << " " << "to Point(" << x2 << "," << y2 << ")" << " " << "is" << " " << d << endl;
//    }
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//using namespace std;
//class date
//{
//    int year, month, day;
//public:
//    date()
//    {
//        year = 1900; month = 1; day = 1;
//    }
//    date(int y, int m, int d)
//    {
//        year = y;
//        month = m;
//        day = d;
//    }
//    int getyear()
//    {
//        return year;
//    }
//    int getmonth()
//    {
//        return month;
//    }
//    int getday()
//    {
//        return day;
//    }
//    void setdate(int y, int m, int d)
//    {
//        year = y;
//        month = m;
//        day = d;
//   }
//    void addoneday()
//    {
//        int _month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//        day = day + 1;
//        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
//        {
//            _month[2] = 29;
//        }
//        if (day > _month[month])
//        {
//            day = 1;
//            month = month + 1;
//        }
//        if (month > 12)
//        {
//            month = 1;
//            year = year + 1;
//        }
//    }
//    void print()
//    {
//        cout << "Tomorrow is"<< " " << year<< "/"<<setfill('0') << setw(2)  << month << "/" <<setfill('0') << setw(2) << day << endl;
//    }
//};
//int main()
//{
//    int t,year,month,day;
//    cin >> t;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> year >> month >> day;
//        date date1(year, month, day);
//        date1.setdate(year,month,day);
//        cout << "Today is"<< " "<< year << "/" << setfill('0') << setw(2) << month << "/" << setfill('0') << setw(2) << day << endl;
//        date1.addoneday();
//        date1.print();
//    }
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//using namespace std;
//class Point
//{
//    double x, y;
//public:
//    Point()
//    {
//        cout << "Constructor." << endl;
//        x = 0; y = 0;
//    }
//   
//    void setpoint(double x_, double y_)
//    {
//        x = x_; y = y_;
//    }
//    ~Point()
//{
//    cout << "Distructor." << endl;
//}
//    double getx()
//    {
//        return x;
//    }
//    double gety()
//    {
//        return y;
//    }
//    double getDisTo(Point const& p)
//    {
//       return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
//    }
//};
//int main()
//{
//    int t, n;
//    double x, y;
//  
//    cin >> t ;
//    for (int m = 0; m < t; m++)
//    {
//        cin >> n;
//        Point *point1=new Point[n];
//        double max = 0, i1 = 0, j1 = 1;
//        for (int j = 0; j < n; j++)
//        {
//            cin >> x >> y;
//            point1[j].setpoint(x, y);
//        }
//        for (int i = 0; i < n; i++)
//        {
//            for (int j = i + 1; j < n; j++)
//            {
//                double d = point1[i].getDisTo(point1[j]);
//                if (d > max)
//                {
//                    max = d;
//                    i1 = i;
//                    j1 = j;
//                }
//            }
//        }
//        cout << "The longest distance is " << fixed << setprecision(2) << max << " between p[" << fixed << setprecision(0) << i1 << "] and p[" << j1 << "]." << endl;
//    delete[]point1;
//    }
//
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//using namespace std;
//class CFraction
//{
//private:
//    int fz, fm;
//public:
//    CFraction(int fz_val, int fm_val)
//    {
//        fz = fz_val; fm = fm_val;
//    }
//    CFraction add(const CFraction& r)
//    {
//        return CFraction(fz * r.fm + fm * r.fz, fm * r.fm);
//    }
//    CFraction sub(const CFraction& r)
//    {
//        return CFraction(fz * r.fm - fm * r.fz, fm * r.fm);
//    }
//    CFraction mul(const CFraction& r)
//    {
//        return CFraction(fz * r.fz , fm * r.fm);
//    }
//    CFraction div(const CFraction& r)
//    {
//        return CFraction(fz * r.fm, fm * r.fz);
//    }
//    int getGCD()
//    {
//        int n,m;
//        n = fz; m = fm;
//        if (n < 0)
//            n = -n;
//        if (m < 0)
//            m = -m;
//        if (n > m)
//        {
//            int t;
//            t = m;
//            m = n;
//            n= t;
//        }
//        int r = m % n;
//        while (r != 0)
//       {
//            m = n;
//            n = r;
//            r = m % n;
//        }
//        return n;
//    }
//    void print()
//    {
//        if (fm < 0)
//        {
//            fz = -fz;
//            fm = -fm;
//        }
//        int gcd = getGCD();
//        cout << fz / gcd << "/" << fm / gcd << endl;
//    }
//};
//int main()
//{
//    int t,fz,fm,fz1,fm1;
//    char c;
//    cin >> t;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> fz >> c >> fm;
//        CFraction cfraction(fz, fm);
//        cin >> fz1 >> c >> fm1;
//        CFraction cfraction1(fz1, fm1);
//        cfraction.add(cfraction1).print();
//        cfraction.sub(cfraction1).print();
//       cfraction.mul(cfraction1).print();
//        cfraction.div(cfraction1).print();
//        cout << "\n";
//    }
//  return 0;
//}
#include <iostream>
#include <iomanip>
using namespace std;
class CStack
{
public:
   
    CStack(int s)
    {
        size = s;
        top = 0;
        a = new int[size];
        cout << "Constructor." << endl;
    }
    int get(int index)
    {
        return a[index];
    }
    void push(int n)
    {
        a[top] = n;
        top++;
    }
    int isempty()
    {
        if (top==0)
            return 1;
        else
            return 0;
    }
    int idfull()
    {
        if (top == size )
            return 1;
        else
            return 0;
    }
    int pop()
    {   
        top--;
        return a[top];
    }
    ~CStack()
    {
        delete[]a;
        cout << "Destructor." << endl;
    }
    void print()
    {
        int date = pop();
        if (top==0)
            cout << date;//看输出要求，最后一个无空格
        else
        cout << date<<" ";
    }
private:
    int* a;
    int size;
    int top;
};
int main()
{
    int n,date,t;
    cin >> t;
    for (int i = 0; i < t; i++) 
    { 
        cin >> n; 
        CStack  a(n);
        for (int index = 0; index < n; index++)
        {
            cin >> date;
            a.get(index);
            a.push(date);
        }
         while(a.isempty()!=1)
         {
            a.print();
        }
         cout << endl;
    }
    return 0;
   
}